/**
 * @des 防抖 ，多次只执行最后一次
 * @param func 需要包装的函数
 * @param delay 延迟时间，单位ms
 * @param immediate 是否默认执行一次(第一次不延迟)
 */
function debounced(func, delay = 200, immediate = false) {
  let timer;
  return function (that, args) {
    if (immediate) {
      func.apply(that, args);
      immediate = false;
      return;
    }
    clearTimeout(timer);
    timer = setTimeout(() => {
      func.apply(that, args);
    }, delay);
  };
}

export default {
  //监听元素尺寸改变
  inserted(el, binding) {
    // 这里使用debounce防抖处理，防抖的延时时间可以通过自定义指令的参数传过来，如`v-resize:300`表示300ms延时
    el._resizer = new window.ResizeObserver(debounced(binding.value, Number(binding.arg) || 500, true));
    el._resizer.observe(el);
  },
  unbind(el) {
    el._resizer.disconnect();
  }
};
